#include "reactor.h"
#include "logger.h"

Reactor::Reactor() {
    m_reactor = event_base_new();
    //当我们调用event_base_new函数的时候，这个函数会检测环境变量然后去申请一个相应配置的event_base返回回来
    if ( !m_reactor ) {
        LOG_ERROR << "event_base_new() failed!";
    }
}
Reactor::~Reactor() {}

//这个函数实现监听文件描述符int fd上的事件（short events），并调用回调函数event_callback_fn处理事件，
//回调函数需要的参数由 void* arg 传入（一般传入this指针）
void Reactor::AddEventAndHander(int fd, short events, event_callback_fn callback, void* arg) {
    struct event* ev = event_new(m_reactor, fd, events, callback, arg);
    //event_new分配并初始化一个新的event结构体，准备被添加
    //第一个参数，struct event_base* m_reactor
    if ( !ev ) {
        LOG_ERROR << "event_new() failed";
    }
    if ( -1 == event_add(ev, NULL) ) {
        LOG_ERROR << "event_add() failed";
    }
}

void Reactor::Loop() {
    event_base_dispatch(m_reactor);  //完成循环监听事件功能
}